package condominio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import condominio.excepcion.DAOExcepcion;
import condominio.modelo.Cuota;
import condominio.util.ConexionBD;

public class CuotaDAO extends BaseDAO {
	public int insertar(Cuota vo) throws DAOExcepcion {
		System.out.println("CuotaDAO: insertar(Cuota vo)");
		String query = "INSERT INTO Cuota(TxAnio, TxMes, QtImporte,FeVencimiento) VALUES (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		int i=0;
		try {
			con = ConexionBD.getConexion();
			System.out.println(query);
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, vo.getAnio()); 
			stmt.setString(2, vo.getMes());
			stmt.setDouble(3, vo.getImporteTotal());
			stmt.setDate(4, vo.getFechaVencimiento());// .setDate(4, vo.getFecVencimiento().toString()); //4, (Date) vo.getFecVencimiento());
			
			i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return i;
	}
	
	public Cuota obtener(String Anio,String Mes) throws DAOExcepcion {
		System.out.println("CuotaDAO: obtener(String Anio,String Mes)");
		Cuota vo = new Cuota();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select TxAnio, TxMes, QtImporte,FeVencimiento from Cuota where TxAnio=? AND TxMes =?";
			con = ConexionBD.getConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, Anio);
			stmt.setString(2, Mes);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setAnio(rs.getString(1));
				vo.setMes(rs.getString(2));
				vo.setImporteTotal(rs.getDouble(3));
				vo.setFechaVencimiento(rs.getDate(4));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	 
	public void eliminar(String Anio,String Mes) throws DAOExcepcion {
		System.out.println("CuotaDAO: eliminar(String Anio,String Mes)");
		String query = "DELETE FROM Cuota where TxAnio=? AND TxMes =?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.getConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, Anio);
			stmt.setString(2, Mes);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	

	public void actualizar(Cuota vo) throws DAOExcepcion {
		System.out.println("CuotaDAO: actualizar(Cuota vo)");
		String query = "update Cuota set QtImporte=?, FeVencimiento = ? where TxAnio=? AND TxMes =?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.getConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(3, vo.getAnio()); 
			stmt.setString(4, vo.getMes());
			stmt.setDouble(1, vo.getImporteTotal());
			stmt.setDate(2, vo.getFechaVencimiento());// .setDate(4, vo.getFecVencimiento().toString()); //4, (Date) vo.getFecVencimiento());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Collection<Cuota> listar() throws DAOExcepcion {
		System.out.println("CuotaDAO: listar()");
		Collection<Cuota> c = new ArrayList<Cuota>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.getConexion();
			String query = "select TxAnio, TxMes, QtImporte,FeVencimiento  from Cuota";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cuota vo = new Cuota();
				vo.setAnio(rs.getString("TxAnio"));
				vo.setMes(rs.getString("TxMes"));
				vo.setImporteTotal(rs.getDouble("QtImporte"));
				vo.setFechaVencimiento(rs.getDate("FeVencimiento"));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
}
